/**
 * Notes: 测试数据服务
 * Date: 2023-10-01 19:40:00 
 */

const BaseProjectAdminService = require('./base_project_admin_service.js');
const KnowledgeModel = require('../../model/knowledge_model.js');
const VectorService = require('../vector/vector_service.js');
const timeUtil = require('../../../../framework/utils/time_util.js');
const util = require('../../../../framework/utils/util.js');

class ApiTestService extends BaseProjectAdminService {

    /**
     * 构造函数
     */
    constructor() {
        super();
        this.vectorService = new VectorService();
    }

    /**
     * 生成测试数据
     */
    async genTestData(adminId) {
        this._checkAdminId(adminId);

        await this._genKnowledgeData();

        return {
            success: true
        };
    }

    /**
     * 生成知识库测试数据
     */
    async _genKnowledgeData() {
        const knowledgeItems = [
            {
                title: '变压器工作原理',
                content: `变压器是利用电磁感应原理工作的静止电气设备，主要由铁芯和线圈组成。
                
变压器的工作原理基于法拉第电磁感应定律：当原边线圈中通过交流电时，铁芯中产生交变磁通；此交变磁通穿过副边线圈，在副边线圈中感应出电动势。

变压器的电压变比等于原、副边线圈匝数比：U₁/U₂ = N₁/N₂
其中：U₁为原边电压，U₂为副边电压，N₁为原边匝数，N₂为副边匝数

变压器主要用于电力系统中的电压转换、电流转换和阻抗匹配。在电力系统中，通过变压器的升压和降压作用，可以有效减少电能在传输过程中的损耗。`,
                desc: '变压器的基本工作原理和应用',
                type: 'equipment',
                category: '变压器',
                tags: '变压器,电力设备,电磁感应'
            },
            {
                title: '电力系统频率调节原理',
                content: `电力系统的频率反映了系统发电机组转速的平均值，是衡量电力系统运行质量的重要指标。在正常情况下，电力系统的标准频率为50Hz（中国、欧洲等）或60Hz（美国等）。

频率调节的基本原理是保持系统有功功率平衡。当负荷增加时，如果发电机组的机械功率不变，则系统频率下降；当负荷减少时，系统频率上升。

频率调节主要通过以下几种方式实现：
1. 一次调频：依靠发电机组调速器自动响应频率变化
2. 二次调频：由调度中心通过AGC（自动发电控制）系统对机组出力进行调整
3. 三次调频：调度人员手动干预调整机组出力

频率的允许偏差范围通常为±0.2Hz。当系统频率严重偏离时，可能触发低频减载或高频切机等紧急控制措施，以防止系统崩溃。`,
                desc: '电力系统频率调节的基本原理和方法',
                type: 'system',
                category: '系统稳定',
                tags: '频率调节,电力系统,稳定控制'
            },
            {
                title: '电力线路故障类型及处理方法',
                content: `电力线路常见故障类型包括：

1. 短路故障
   - 单相接地短路：一相导线与大地之间发生短路
   - 两相短路：两相导线之间发生短路
   - 两相接地短路：两相导线同时与大地发生短路
   - 三相短路：三相导线互相短路
   
2. 断线故障
   - 单相断线：一相导线断开
   - 多相断线：多相导线同时断开
   
3. 绝缘故障
   - 绝缘老化或损坏导致的放电现象
   - 污闪故障：绝缘子表面污秽导致的闪络

故障处理方法：
1. 保护装置动作，自动跳闸隔离故障区段
2. 派遣检修人员进行现场检查，确定故障点
3. 根据故障类型采取相应的修复措施
4. 修复完成后进行绝缘测试和试送电
5. 正常送电后监测系统运行状态

在处理故障时，必须严格遵守安全操作规程，确保人身安全和设备安全。`,
                desc: '电力线路常见故障类型及其处理方法',
                type: 'fault',
                category: '线路故障',
                tags: '电力线路,故障处理,短路,断线'
            },
            {
                title: '配电网自动化系统结构',
                content: `配电网自动化系统是实现配电网智能化管理的关键技术，其系统结构一般分为三层：

1. 主站层
   - 数据库服务器：存储系统数据和历史数据
   - 应用服务器：运行SCADA、DMS、OMS等应用软件
   - 工作站：操作人员的人机交互界面
   - 通信前置机：负责与现场设备通信

2. 通信网络层
   - 光纤网络：主干通信网络
   - 无线通信网络：4G/5G、微波等
   - 电力线载波通信：利用电力线进行数据传输

3. 现场层
   - 馈线自动化终端（FTU）：安装在分段开关处
   - 配电终端（DTU）：安装在配电变压器处
   - 开关站自动化终端（RTU）：安装在开关站
   - 智能开关设备：带通信和控制功能的断路器、负荷开关等

配电网自动化系统的主要功能包括：
- 配电网运行监控
- 故障定位与隔离
- 非故障区域供电恢复
- 电网运行优化
- 负荷管理
- 统计报表与分析

先进的配电网自动化系统还可以支持分布式电源接入管理、需求侧响应等智能电网功能。`,
                desc: '配电网自动化系统的层次结构和主要功能',
                type: 'system',
                category: '自动化',
                tags: '配电网,自动化,SCADA,智能电网'
            },
            {
                title: '电力系统电压稳定性分析方法',
                content: `电压稳定性是指电力系统在正常运行或受到扰动后维持所有母线电压在可接受范围内的能力。电压不稳定可能导致电压崩溃，造成大面积停电。

电压稳定性分析的主要方法包括：

1. 静态分析方法
   - PV曲线法：分析负荷增长与母线电压的关系
   - QV曲线法：分析无功功率注入与母线电压的关系
   - 灵敏度分析：研究电压对各种参数变化的敏感程度
   - 特征值分析：通过系统雅可比矩阵特征值判断稳定性

2. 动态分析方法
   - 时域仿真：通过求解微分-代数方程组模拟系统动态过程
   - 小信号分析：研究系统对小扰动的响应特性

3. 指标评估方法
   - 电压稳定裕度：如最小奇异值、负载功率裕度等
   - 崩溃点预测：预测系统可能发生电压崩溃的临界点

电压稳定性改善措施：
- 增加无功补偿装置（如电容器组、静止无功补偿器SVC、静止同步补偿器STATCOM等）
- 调整发电机端电压和变压器分接头
- 实施负荷切除
- 优化系统运行方式
- 合理规划输电网络`,
                desc: '电力系统电压稳定性的分析方法和改善措施',
                type: 'system',
                category: '系统稳定',
                tags: '电压稳定,PV曲线,QV曲线,电压崩溃'
            }
        ];

        // 清空旧数据（这里只是为了测试用，实际应用中不要这样做）
        await KnowledgeModel.del({});

        let count = 0;
        for (const item of knowledgeItems) {
            // 构造数据
            const data = {
                KNOWLEDGE_TITLE: item.title,
                KNOWLEDGE_CONTENT: item.content,
                KNOWLEDGE_DESC: item.desc,
                KNOWLEDGE_TYPE: item.type,
                KNOWLEDGE_CATEGORY: item.category,
                KNOWLEDGE_TAGS: item.tags,
                KNOWLEDGE_STATUS: KnowledgeModel.STATUS.SHOW,
                KNOWLEDGE_SORT: 9999,
                KNOWLEDGE_VECTOR_STATUS: KnowledgeModel.VECTOR_STATUS.PENDING,
                KNOWLEDGE_ADD_TIME: timeUtil.time(),
                KNOWLEDGE_EDIT_TIME: timeUtil.time(),
                KNOWLEDGE_ADD_IP: this._getIP(),
            };

            // 写入数据库
            const id = await KnowledgeModel.insert(data);
            
            // 添加到向量库
            if (id) {
                // 异步处理向量化，不需要等待完成
                await this.vectorService.vectorizeDocument(id).catch(error => {
                    console.error('向量化文档失败:', error);
                });
                count++;
            }
        }

        return count;
    }
}

module.exports = ApiTestService; 